package com.gw.business.analysis.service;

import java.util.List;

import com.gw.business.analysis.model.UserTrackBasic;
import com.gw.business.analysis.model.UserTrackDataDetail;
import com.gw.business.analysis.model.UserTrackDataStatistics;
import com.gw.business.statistics.detailed.model.DetailForm;
import com.gw.platform.page.impl.Page;

public interface UserTrackDataDetailService {
		public Boolean insert(UserTrackDataDetail item);
		public Boolean update(UserTrackDataDetail item);
		/**
		 * 获取某个时间段 某个用户ID endTime最大的数据 
		 * @param endTime
		 * @return
		 */
		public List<UserTrackDataDetail> findEndTimeBigUser(String endTime);
		
		/**
	     * 获取详细列表
	     * @param param
	     * @return
	     */
	    public Page queryUserList(DetailForm form, String pageNum, String pageSize);
	    
	    /**
		 * 用户访问行为统计表(精确到小时)  返回每一个媒介   来源每小时返回统计数
		 * @param startTime
		 * @return
		 */
		public List<UserTrackDataStatistics>  groupByhourDate(String startTime);
		
	    /**
         * 获取注册异常信息
         * @param startTime
         * @param endTime
         * @param isSend
         * @return
         */
        public List<UserTrackDataDetail> queryRegistExceptionData(String startTime, String endTime, String isSend);
        /**
         * 获取当天有没有发送注册异常邮件
         * @param nowTime
         * @param userId
         * @return
         */
        public List<UserTrackDataDetail> queryRegistExceptionSendData(String nowTime, String userId);
        /**
         * 修改用户注册异常为已邮件发送
         * @param userId
         * @param time
         */
        public void updateUserRegistExceptionSend(String userId, String time);
        
    	/**
    	 * 查询大于某一个时间段并小于某一个时间段的数据 归因开始
    	 * @param visitTimeBeign
    	 * @param visitTimeEnd
    	 * @return
    	 */
    	public List<UserTrackDataDetail> getBaseSourceByDataTime(String userId, String visitTimeBeign, String visitTimeEnd);
    	
    	/**
    	 * 查询大于某一个时间段并小于某一个时间段的数据并排除一个月内没有开户的数据
    	 * @param visitTimeBeign
    	 * @param visitTimeEnd
    	 * @return
    	 */
    	public List<UserTrackDataDetail> getBaseSourceByDataTimeExpert(String behaviorDetailType, String visitTimeBeign, String visitTimeEnd, String mark);
    	
    	/**
    	 * 取分组的第一条数据
    	 * @param userId 用户ID
    	 * @param utmcsr 广告来源
    	 * @param utmcmd 广告媒介
    	 * @param visitTime 访问时间，用来排序
    	 * @return
    	 */
    	public List<UserTrackDataDetail> getVisitFirstData(String userId, String utmcsr, String utmcmd, String visitTime);
        
    	public boolean updateObjTrack(UserTrackDataDetail obj);



    /**
     * 获取指定某天的所有模拟开户或真实开户的详细会话数据
     * @param visitTime 访问时间，格式为 yyyy-MM-dd
     * @return
     */
    public List<UserTrackDataDetail> queryDataDetailByDay(String visitTime);


    /**
     * 根据用户id 获取该用户的第一次访问数据
     * @param userId 用户ID
     * @return
     */
    public UserTrackDataDetail getVisitFirstData(String userId);


    /**
     * 根据用户id 获取用户在结束时间之前的第一次模拟开户
     * @param userId 用户ID
     *  @param endTime 结束时间
     * @return
     */
    public UserTrackDataDetail getFirstDemoDataDetail(String userId, String endTime);

    /**
     * 批量更新标记is_attributed,注明已被归因过
     * @param updateList
     */
    public void batchUpdate(List<Integer> updateList);
}
